package com.academico.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import com.academico.database.Connect;
import com.academico.model.Curso;
import com.academico.util.Util;

public class CursoDAO {
	
	private Connection connection;

	public CursoDAO() {
		this.connection = Connect.getInstance();;
	}
	
	public void save(Curso curso){
		if(Util.isNotNull(curso)){
			insert(curso);
		}
	}
	
	public void update(Curso curso){
		String query = "UPDATE curso SET situacaocurso = '"+ curso.getSituacaoCurso() +"' where codigocurso =" + curso.getCodigoCurso();
		System.out.println(query);
			Statement stmt = null; 
		try {
			stmt = connection.createStatement();
			stmt.executeUpdate(query);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}	
		}
		
	}
	
	public Curso findById(Integer id){
		
		String query = "SELECT * FROM curso WHERE codigocurso = " + id;
		System.out.println(query);
		Statement stmt = null; 
		try {
			stmt = connection.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			
			if(rs.next()) {
				Curso curso = new Curso();
				curso.setCodigoCurso(rs.getInt("codigocurso"));
				curso.setNomeCurso(rs.getString("nomecurso"));
				curso.setDataCriacao(rs.getDate("datacriacao"));
				curso.setDataAutorizacao(rs.getDate("dataautorizacao"));
				curso.setDataReconhecimento(rs.getDate("datareconhecimento"));
				curso.setCargaHoraria(rs.getInt("cargahoraria"));
				curso.setSituacaoCurso(Curso.SituacaoCurso.valueOf(rs.getString("situacaocurso")));
				return curso;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	public List<Curso> findAll(){
		String query = "SELECT * FROM curso";
		
		System.out.println(query);
		Statement stmt = null; 
		List<Curso> listaCurso = new ArrayList<Curso>();
		try {
			stmt = connection.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			
			while (rs.next()) {
				Curso curso = new Curso();
				curso.setCodigoCurso(rs.getInt("codigocurso"));
				curso.setNomeCurso(rs.getString("nomecurso"));
				curso.setDataCriacao(rs.getDate("datacriacao"));
				curso.setDataAutorizacao(rs.getDate("dataautorizacao"));
				curso.setDataReconhecimento(rs.getDate("datareconhecimento"));
				curso.setCargaHoraria(rs.getInt("cargahoraria"));
				curso.setSituacaoCurso(Curso.SituacaoCurso.valueOf(rs.getString("situacaocurso")));
				listaCurso.add(curso);
			}
			return listaCurso;
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	return null;
	}

	private void insert(Curso curso) {
		SimpleDateFormat sfd = new SimpleDateFormat("yyyy/MM/dd");
		String query = "INSERT INTO curso (nomecurso, datacriacao, dataautorizacao, datareconhecimento, cargahoraria, situacaocurso)";
		query += "VALUES ('"+ curso.getNomeCurso() + 
			"','" + sfd.format(curso.getDataCriacao()) + 
			"','" + sfd.format(curso.getDataAutorizacao()) + 
			"','" + sfd.format(curso.getDataReconhecimento()) +
			"','" + curso.getCargaHoraria() + "','" +
			curso.getSituacaoCurso() + "')";
		
		System.out.println(query);
		
			Statement stmt = null; 
		try {
			stmt = connection.createStatement();
			stmt.executeUpdate(query);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}	
		}
		
	}

}
